package cn.com.utils;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class ConnUtils {
    //定义数据源
    private static DataSource dataSource;
    //创建静态块 初始化
    static{
        //加载dbcp.properties配置文件
        //alt+回车键
        InputStream in = Thread.currentThread()
                .getContextClassLoader()
                .getResourceAsStream("dbcp.properties");
        //创建Properties对像用来存储配置文件中的数据
        Properties props = new Properties();
        //把数据添加到props对像中
        try {
            props.load(in);
            //获取配置文件 中的数据
            System.out.println("username:"+props.getProperty("username"));
            //创建数据源
            dataSource = BasicDataSourceFactory.createDataSource(props);
            System.out.println("dataSource:"+dataSource);
            //输出连接对像
            //System.out.println("connection:"+dataSource.getConnection());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //从数据源中获取连接对像，用来操作数据库
    public static Connection getConnection(){
        Connection conn = null;
        try{
            conn = dataSource.getConnection();
        }catch(Exception e){
            e.printStackTrace();
        }
        return conn;
    }
    //释放资源
    public static void close(Connection conn, PreparedStatement stmt){
        try {
            if (stmt != null) {//如果stmt对像不为null,把它关闭，释放资源
                stmt.close();
            }
            if(conn != null){
                conn.close();
            }
        }catch (SQLException e){//对数据库的操作都需要处理SQLException
            e.printStackTrace();
        }
    }

    //释放资源
    public static void close(Connection conn, PreparedStatement stmt, ResultSet rs){
        try {
            if(rs != null){
                rs.close();
            }
            if (stmt != null) {//如果stmt对像不为null,把它关闭，释放资源
                stmt.close();
            }
            if(conn != null){
                conn.close();
            }
        }catch (SQLException e){//对数据库的操作都需要处理SQLException
            e.printStackTrace();
        }
    }

    //main
    public static void main(String args[]){

    }
}
